"""
布尔（Boolean）类型是一种数据类型，表示逻辑型变量，其中只有两个值True和False，分别表示真和假，也可以简单地理解为正确和错误。
布尔类型在控制流语句（如条件判断和循环）中扮演着重要角色。
如果我们用type()内置函数查看True和False的类型，如
print(type(True), type(False))
<class 'bool'> <class 'bool'>
"""
#与运算
# and运算符在其两个操作数都为True时返回True，否则返回False
print(True and True)   # 输出：True
print(True and False)  # 输出：False
print(False and True)  # 输出：False
print(False and False) # 输出：False
#或运算
#or运算符在其两个操作数中至少有一个为True时返回True，否则返回False。
print(True or True)    # 输出：True
print(True or False)   # 输出：True
print(False or True)   # 输出：True
print(False or False)  # 输出：False
#非运算
# not运算符返回其操作数的反值，即如果操作数为True，则返回False，反之亦然。
print(not True)  # 输出：False
print(not False) # 输出：True
"""
常用的比较运算符
- 等于（==）：检查两个值是否相等。
- 不等于（!=）：检查两个值是否不相等。
- 大于（>）：检查左边的值是否大于右边的值。
- 小于（<）：检查左边的值是否小于右边的值。
- 大于等于（>=）：检查左边的值是否大于或等于右边的值。
- 小于等于（<=）：检查左边的值是否小于或等于右边的值。

比较运算符的两边可以是数字，按照数字序（Numerical Order）进行比较。
数字序是按照数值大小对数字进行比较和排序。遵循以下规则：
- 负数小于正数。
- 较小的数值排在较大的数值之前。

"""
a = 10
b = 20

print(a == b)  # 输出：False
print(a != b)  # 输出：True
print(a > b)   # 输出：False
print(a < b)   # 输出：True
print(a >= b)  # 输出：False
print(a <= b)  # 输出：True
"""
比较运算符的两边可以是字符串，按照字典序（Lexicographical Orderr）进行比较。
字典序是按照字母表顺序对字符串进行比较和排序，也称为字母序。遵循以下规则：
- 按字符的字母顺序比较，首先比较第一个字符，如果相同，则比较下一个字符，依此类推。
- 字母的顺序是基于它们的ASCII或Unicode编码值，例如，'a'的编码值是97，'b'是98，依此类推。
- 大写字母的编码值小于小写字母，因此所有大写字母在字典序中排列在小写字母之前。
"""
str1 = "abandon"
str2 = "apple"

print(str1 == str2)  # 输出：False
print(str1 < str2)   # 输出：True
print(str1 > str2)   # 输出：False
# 比较运算符可以用于列表、元组等序列类型的比较。类似字符串，比较也是逐个元素进行的。
# 譬如两个数字类型列表的比较
# 两个数字类型列表的比较
list1 = [1, 2, 3]
list2 = [1, 2, 4]

print(list1 == list2)  # 输出：False
print(list1 < list2)   # 输出：True
print(list1 > list2)   # 输出：False
# 在Python中，条件语句允许程序根据不同的条件执行不同的代码块。
# 条件语句通常使用布尔类型和逻辑运算符来评估条件表达式。
# if 条件:
#    '''
#    条件为真时
#    做若干操作
#    '''
#if-else语句可以处理条件为真和为假时的两种情况。
x = int(input())
if x > 5:
    print(f"x is {x}")
    print("x is greater than 5")
else:
    print(f"x is {x}")
    print("x is not greater than 5")
#if-elif-else语句可以处理多个条件。
x = int(input())
if x > 5:
    print(f"x is {x}")
    print("x is greater than 5")
elif x < 5:
    print(f"x is {x}")
    print("x is less than 5")
else:
    print(f"x is {x}")
    print("x is equal to 5")
"""
布尔运算具有短路特性：
- 与短路运算：如果第一个操作数为False，则直接返回False，不再计算第二个操作数。
- 或短路运算：如果第一个操作数为True，则直接返回True，不再计算第二个操作数。
"""
def check_true():
    print("Checking True")
    return True

def check_false():
    print("Checking False")
    return False

# 与运算短路
print(check_false() and check_true())
# 输出：
# Checking False
# False

# 或运算短路
print(check_true() or check_false())
# 输出：
# Checking True
# True